package com.boil.qz.safekavass.web.controller;

import com.boil.pojo.Page2Vo;
import com.boil.pojo.ResultVo;
import com.boil.qz.safekavass.model.HomeAdvert;
import com.boil.qz.safekavass.model.LoginUser;
import com.boil.qz.safekavass.pojo.HomeAdvertVo;
import com.boil.qz.safekavass.service.HomeAdvertService;
import com.boil.qz.safekavass.web.request.param.AddHomeAdvertParam;
import com.boil.qz.safekavass.web.request.param.HomeAdvertIsShowParam;
import com.boil.qz.safekavass.web.request.param.HomeAdvertListParam;
import com.boil.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.validation.Valid;
import java.util.Date;

/**
 * Created by ChenYong on 2017-04-19.
 * <br>
 * 首页广告 Controller。
 */
@Controller
@RequestMapping("/web/home/advert")
public class HomeAdvertController extends OkBaseController {
    /**
     * 注入广告 Service
     */
    @Autowired
    private HomeAdvertService homeAdvertService;

    /**
     * 广告列表页面。
     *
     * @param model 模型
     * @return 广告列表页面
     */
    @RequestMapping(method = RequestMethod.GET, value = "/list.html")
    public String listHtml(Model model) {
        return "/home/advert/list";
    }

    /**
     * 添加广告页面。
     *
     * @param model 模型
     * @return 添加广告页面
     */
    @RequestMapping(method = RequestMethod.GET, value = "/add.html")
    public String addHtml(Model model) {
        return "/home/advert/add";
    }

    /**
     * 获取广告列表 json。
     *
     * @param model  模型
     * @param param  广告列表的请求参数
     * @param errors 请求参数的校验结果
     * @return 广告列表 json
     */
    @RequestMapping(method = RequestMethod.GET, value = "/list.json")
    @ResponseBody
    public ResultVo listJson(Model model, @Valid HomeAdvertListParam param, BindingResult errors) {
        // 结果 Vo
        ResultVo resultVo = new ResultVo();

        // 判断请求参数是否校验通过
        Utils.hasRequestParamError(resultVo, errors);

        // 查询分页实例
        Page2<HomeAdvertVo> page2 = Utils.getPage2(request, param, Constants.ID_STR);
        page2.getParams().put("homeAdCreatePerson", param.getHomeAdCreatePerson());
        page2.getParams().put("homeAdName", param.getHomeAdName());
        page2.getParams().put("isShow", param.getIsShow());
        page2.getParams().put("startDate", param.getStartDate());
        page2.getParams().put("endDate", param.getEndDate());

        // 分页查询
        homeAdvertService.findInPage(page2);

        // 获取 DataTables 专用分页映射实例
        Page2Vo<HomeAdvertVo> page2Vo = Utils.getPage2Vo(param, page2);

        resultVo.setResult(page2Vo);

        return resultVo;
    }

    /**
     * 添加广告。
     *
     * @param model  模型
     * @param param  添加广告的请求参数
     * @param errors 请求参数的校验结果
     * @return 重定向到广告列表页面--->“redirect:/home/advert/list.html”
     */
    @RequestMapping(method = RequestMethod.POST, value = "/add.html")
    public String add(Model model, @Valid AddHomeAdvertParam param, BindingResult errors) {
        // 结果 Vo
        ResultVo resultVo = new ResultVo();

        // 判断请求参数是否校验通过
        Utils.hasRequestParamError(resultVo, errors);

        // 获取登录用户
        LoginUser loginUser = getLoginUser();
        // 创建广告实例
        HomeAdvert homeAdvert = new HomeAdvert();
        homeAdvert.setHomeAdName(param.getHomeAdName());
        homeAdvert.setHomeAdCreatePersonId(String.valueOf(loginUser.getId()));
        homeAdvert.setHomeAdCreatePerson(loginUser.getLoginName());
        homeAdvert.setHomeAdUrl(param.getHomeAdUrl());
        homeAdvert.setHomeAdToUrl(param.getHomeAdToUrl());
        homeAdvert.setIsShow(param.getIsShow());
        homeAdvert.setHomeAdCreateTime(DateUtils.format(new Date(), Constants.DATE_TIME_FORMAT_1));

        // 保存广告
        homeAdvertService.save(homeAdvert);

        return "redirect:/web/home/advert/list.html";
    }

    /**
     * 根据广告 ID 拼接的字符串显示或隐藏广告。
     *
     * @param model  模型
     * @param param  添加广告的请求参数
     * @param errors 请求参数的校验结果
     * @return 结果 json
     */
    @RequestMapping(method = RequestMethod.POST, value = "/is_show.json")
    @ResponseBody
    public ResultVo isShow(Model model, @Valid HomeAdvertIsShowParam param, BindingResult errors) {
        // 结果 Vo
        ResultVo resultVo = new ResultVo();

        // 判断请求参数是否校验通过
        Utils.hasRequestParamError(resultVo, errors);

        homeAdvertService.updateIsShowById(param.getIds(), param.getIsShow());

        return resultVo;
    }
}